補充一下JavaScript的引數傳遞,昨天說是pass by value,但書中提到會有例外的情況,之後學到物件的時候再來探討這個問題。
本日閱讀進度:第三章 介紹函式(94~114頁)
重點摘要:
1.傳入的引數數量不對時
在寫Ruby的時候,如果傳入的引數和參數數量不一致,馬上就會噴錯,說我預期OO,你給我XX。
據說JavaScript在設計上為了不讓使用者信心崩潰,總是盡量能不噴錯就不噴錯,不過有時侯這樣的貼心讓人更摸不著頭緒了。
狀況1:傳入的引數不足
未對應到引數的參數會被設置成未定義。
function makeTea(cups, tea) {
console.log("Brewing " + cups + " cups of " + tea);
}
makeTea(3);
//"Brewing 3 cups of undefined"
狀況2:傳入的引數太多
多出來的引數會被忽略。
function makeTea(cups, tea) {
console.log("Brewing " + cups + " cups of " + tea);
}
makeTea(3, "Earl Grey", "Hello");
//"Brewing 3 cups of Earl Grey"
狀況3:沒有任何參數時
這是OK的,許多函式沒有參數,但圓括號還是要記得加上。
function barkAtTheMoon(){
console.log("Woooooooooo!");
}
barkAtTheMoon();
//"Woooooooooo!"
2.作用域、全域變數與區域變數
變數可以被使用的地方稱為作用域(scope)。
若變數被宣告在函式之外,則它是一個「全域變數」(global variable),可以在程式碼中任何地方使用它。若變數被宣告在函式之內,則它是一個「區域變數」(local variable),只能在函式裡面使用它。
如果在使用一個變數之前,忘了宣告它,則它將會是一個「全域變數」。
如果全域變數和區域變數有相同的名字,則全域變數會被區域變數遮蔽。
JavaScript總是會在函式的開頭建立所有的區域變數,無論你是否有宣告它們(這稱為「提升」(hoisting))。之後有機會再詳細介紹。
函式其實還有滿多可以說的,不過剛開始入門就先挑幾個重點囉!明天要進入「陣列」的世界,敬請期待!
本文同步發表於cichen